package com.xuan.utils;
import io.jsonwebtoken.*;
import java.util.Date;
public class Jwt {

    private static final String SECRET_KEY = "xuan";

    // 生成 JWT
    public static String generateToken(String username) {
        // 设置过期时间为 1小时
        long expirationTime = 1000 * 60 * 60; // 1 hour
        Date now = new Date();
        Date expiryDate = new Date(now.getTime() + expirationTime);

        // 创建 JWT
        return Jwts.builder()
                .setSubject(username)
                .setIssuedAt(now)
                .setExpiration(expiryDate)
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                .compact();  // 返回 JWT 字符串
    }

    // 解析 JWT
    public static String parseToken(String token) {
        try {
            // 解析 JWT
            Claims claims = Jwts.parser()
                    .setSigningKey(SECRET_KEY)  // 设置密钥
                    .parseClaimsJws(token)      // 解析 JWT
                    .getBody();  // 获取其中的 Claims

            return claims.getSubject();  // 返回用户名（subject）
        } catch (JwtException | IllegalArgumentException e) {
            // 捕获无效的 JWT 异常
            System.out.println("无效的令牌");
            return null;
        }
    }

    // 验证 JWT 是否有效（过期时间校验）
    public static boolean isTokenExpired(String token) {
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(SECRET_KEY)
                    .parseClaimsJws(token)
                    .getBody();
            Date expiration = claims.getExpiration();
            return expiration.before(new Date());
        } catch (Exception e) {
            return false;
        }
    }

    public static void main(String[] args) {
        // 测试生成和解析 JWT
        String token = generateToken("user123");
        System.out.println("Generated Token: " + token);

        // 解析 token
        String username = parseToken(token);
        System.out.println("Parsed Username: " + username);

        // 验证 token 是否过期
        boolean expired = isTokenExpired(token);
        System.out.println("Token Expired: " + expired);
    }
}



